package reflect;

import reflect.bean.User;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ResourceBundle;

/**
 * 通过反射来调用构造函数
 */

public class ReflectTest12 {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        //不使用反射时
        User user = new User();
        User user1 = new User("hqq");

        //使用机制
        Class c = Class.forName(ResourceBundle.getBundle("classinfo2").getString("className"));

        //调用无参数构造jdk9之后就不让用这个方法了
        Object obj = c.newInstance();
        System.out.println(obj);

        //调用其他的构造方法---
        //1-先获取有参数构造方法
        Constructor constructor = c.getDeclaredConstructor(String.class);//通过这个参数判断是哪个构造函数
        //2-调用构造方法 new对象 传入参数
        Object obj1=constructor.newInstance("hqq");
        System.out.println(obj1);


    }
}
